/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2006，所有权利保留。
 * 
 * 文件名：	HFieldText.java
 * 模块说明：	普通文本输入框 | 服务端界面控件
 * 修改历史：
 * 2006-5-26 - lxm - 创建。
 */
package com.hd123.rumba.jsp;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.ecs.html.Input;

import com.hd123.rumba.request.Dictionary;
import com.hd123.rumba.request.JspLib;
import com.hd123.rumba.runtime.FormatSettings;
import com.hd123.rumba.util.AccessMode;

/**
 * 普通文本输入框 | 服务端界面控件
 * <p>
 * 
 * 页面模型：<br>
 * <table border=0 cellspacing=3 cellpadding=0>
 * <tr bgcolor=skyblue>
 * <td>界面元素</td>
 * <td>对象属性</td>
 * </tr>
 * <tr>
 * <td><code>&lt;td&gt;</code></td>
 * <td><i>tdLabel</i></td>
 * </tr>
 * <tr bgcolor=aliceblue>
 * <td><code>&nbsp;&nbsp;...</code></td>
 * <td>参见{@link LabelHField LabelHField}</td>
 * </tr>
 * <tr>
 * <td><code>&lt;td&gt;</code></td>
 * <td><i>tdContent</i></td>
 * </tr>
 * <tr bgcolor=aliceblue>
 * <td><code>&nbsp;&nbsp;&lt;input type=text&gt;</code></td>
 * <td>inputText</td>
 * </tr>
 * </table>
 * 
 * @author lxm
 * 
 */
public class HFieldText extends LabelHField {

  public HFieldText(Dictionary dd, String name, String caption, Object value, Object[] params) {
    super(dd, name, caption, value, params);
  }

  public HFieldText(Dictionary dd, String name, String caption, Object value) {
    super(dd, name, caption, value);
  }

  private Input inputText = null;
  private String valueFormat;

  /**
   * 属性：值的显示格式。<br>
   * 对应的参数名"valueFormat"，下一参数类型为String。
   */
  public String getValueFormat() {
    return valueFormat;
  }

  public void setValueFormat(String valueFormat) {
    this.valueFormat = valueFormat;
  }

  /**
   * 只读属性：存放输入部分的界面元素&lt;input type=text&gt;<br>
   * 对应的参数名"inputText"。
   */
  public Input getInputText() {
    if (inputText == null) {
      inputText = new Input();
      inputText.setType("text");
      inputText.setName(this.getName());
      inputText.setID(this.getName());
    }
    return inputText;
  }

  protected boolean readParam(String paramName, Object paramValue) {
    if (super.readParam(paramName, paramValue))
      return true;
    if ("valueFormat".equals(paramName)) {
      this.valueFormat = (String) paramValue;
      return true;
    }
    return false;
  }

  protected void buildHTML(int accessMode, int promptMode) {
    super.buildHTML(accessMode, promptMode);
    Input inputText = this.getInputText();
    if (accessMode == AccessMode.READWRITE)
      inputText.setClass("small_input");
    else {
      inputText.setClass("small_input_static");
      inputText.setReadOnly(true);
    }
    if (accessMode != AccessMode.INVISIBLE) {
      Object value = this.getValue();
      if (VALUE_PROMPTMODE_ERROR == promptMode)
        value = this.getDd().getFormValue(this.getName());
      if (value != null) {
        String displayValue = "";
        if (value instanceof String)
          displayValue = (String) value;
        else if (value instanceof Date) {
          String pattern = this.valueFormat != null ? this.valueFormat : FormatSettings.yMdHms;
          SimpleDateFormat sdf = new SimpleDateFormat(pattern);
          displayValue = sdf.format((Date) value);
        } else {
          if (this.valueFormat != null)
            displayValue = JspLib.format(value, this.valueFormat);
          else
            displayValue = JspLib.format(value);
        }
        inputText.setValue(displayValue);
      }
    }
    this.assignElementAttrs(inputText, "inputText");
    this.getTdContent().addElement(inputText);

    if (accessMode == AccessMode.READWRITE) {
      StringBuffer sb = new StringBuffer();
      sb.append("<script language='javascript'>");
      sb.append(this.buildJS());
      sb.append("</script>");
      this.getTdContent().addElement(sb.toString());
    }
  }

  /**
   * 构造javascript脚本。将被加入到生成的页面中。
   * 
   * @return 返回构造好的脚本，为&lt;script/&gt;内的javascript脚本部分。
   */
  protected String buildJS() {
    StringBuffer sb = new StringBuffer();
    sb.append("var ctrl = new RFieldText();");
    if (this.getIsRequired().booleanValue())
      sb.append("ctrl.required = true;");
    sb.append("ctrl.bind($('" + this.getName() + "'), $('" + this.getLabel().getAttribute("id")
        + "'));");
    return sb.toString();
  }
}
